class BeringNetworkView extends NetworkView {
  
  BeringEcosystem eco;
  
  BeringNetworkView(BeringEcosystem eco) {
    this.eco = eco;
    varScale = 60;
    fluxScale = 2;
  }
  
  void define() {
    float R = 0.7;
    float theta = 180;
    float dtheta = 27.7;
    addDot_polar(eco.getVar("NO3"), R, theta, styles.dkBlueColor);
    theta -= dtheta;
    addDot_polar(eco.getVar("SP"), R, theta, styles.ltGreenColor);
    theta -= dtheta;
    addDot_polar(eco.getVar("LP"), R, theta, styles.medGreenColor);
    theta -= dtheta;
    addDot_polar(eco.getVar("MZ"), R, theta, styles.ltRedColor);
    theta -= dtheta;
    for (int i=0; i<eco.Nstages; i++) {
      addDot_polar(eco.getVar(eco.stages[i]), R, theta, styles.medRedColor);
      theta -= dtheta;
    }
    addDot_polar(eco.getVar("Eu"), R, theta, styles.dkRedColor);
    theta -= dtheta;
    addDot_polar(eco.getVar("LD"), R, theta, styles.ltBlueColor);
    theta -= dtheta;
    addDot_polar(eco.getVar("SD"), R, theta, styles.ltBlueColor);
    theta -= dtheta;
    addDot_polar(eco.getVar("NH4"), R, theta, styles.medBlueColor);
    
    addArrow(eco.getFlux("Fup_NH4_SP"), styles.ltGreenColor, 0);
    addArrow(eco.getFlux("Fup_NO3_SP"), styles.ltGreenColor, 0);
    addArrow(eco.getFlux("Fup_NH4_LP"), styles.medGreenColor, 0);
    addArrow(eco.getFlux("Fup_NO3_LP"), styles.medGreenColor, 0);
    addArrow(eco.getFlux("FiceAlgae"), 0, -0.3, styles.medGreenColor, 0);
    
    addArrow(eco.getFlux("Fmort_SP"), styles.ltBlueColor, 0);
    addArrow(eco.getFlux("Fmort_LP"), styles.ltBlueColor, 0);
    addArrow(eco.getFlux("Fmort_MZ"), styles.ltBlueColor, 0);
    for (int i=0; i<eco.Nstages; i++) {
      addArrow(eco.getFlux("Fmort_" + eco.stages[i]), styles.ltBlueColor, 0);
    }
    addArrow(eco.getFlux("Fmort_Eu"), styles.ltBlueColor, 0);    
    
    addArrow(eco.getFlux("Fremin_SD"), styles.ltBlueColor, 0);
    addArrow(eco.getFlux("Fremin_LD"), styles.ltBlueColor, 0);
    addArrow(eco.getFlux("Fnitr"), styles.ltBlueColor, 0);

    for (int i=0; i<eco.Nstages-1; i++) {
      addArrow(eco.getFlux("Fmolt_"+eco.stages[i]), styles.ltRedColor, 0);
    }
    addArrow(eco.getFlux("FeggProd"), styles.ltRedColor, 0);

    for (int j=0; j<eco.Npred; j++) {
      for (int i=0; i<eco.Nprey; i++) {
        addArrow(eco.getFlux("Fgraz_" + eco.prey[i] + "_" + eco.pred[j]), styles.medRedColor, 0);
      }
      addArrow(eco.getFlux("Fex_" + eco.pred[j]), styles.ltBlueColor, 0);
      addArrow(eco.getFlux("Feg_" + eco.pred[j]), styles.ltBlueColor, 0);
    }
  }
  
  
  Arrow addArrow(Flux F, float dx, float dy, color col, float angle) { // use this one if one endpoint of the flux is null
    Arrow A;
    if (F.from != null) {
      Dot D = findDot(F.from.shortname);
      A = new Arrow(F.shortname, D, D.x0+dx, D.y0+dy, col, angle, fluxScale, this);
    } else {
      Dot D = findDot(F.to.shortname);
      A = new Arrow(F.shortname, D.x0+dx, D.y0+dy, D, col, angle, fluxScale, this);
    }      
    arrows = (Arrow[])append(arrows, A);
    fluxes = (Flux[])append(fluxes, F);
    return A;
  }

  
}

